"""
@name : 作业练习
@author : chenwenying
@projectname: tree.py
@time : 2022/4/16
"""

# 1、######获取n天之前的日期
# import datetime
# n = input('请问您想要查询几天之前的日期：')
# t = datetime.datetime.now()
# d2 = (t-datetime.timedelta(days=int(n))).strftime("%Y-%m-%d %H:%M:%S")
# print(d2)

# 2、######输出指定文件夹下有哪些文件或文件夹
# import os
# path = input('请输入需要查看的文件夹：')
# if os.path.isdir(path):
#     print(os.listdir(path))
# else:
#     print(f'{path}不是文件夹')

# 3、######列表去重，并且从小到大排序
# try:
#     lst = eval(input('请输入列表：'))
#     lst.sort()
#     print(list(set(lst)))
# except:
#     print('请输入列表')

# 4、######如何在一个函数内部修改全局变量的值
# 如果是可变数据类型，可以在一个函数的内部修改全局变量的值
# 如果是不可变数据类型，需要将局部变量设置为全局变量
# n = 2
# def num():
#     global n
#     n = n+1
# num()
# print(n)

# lst = [3]
# def num():
#     lst.append(1)
# num()
# num()
# print(lst)

# 5、######如何跨模块共享全局变量
# 导入模块

# 6、######python的基本数据类型
# 不可变：
#   数值：
#         整型
#         浮点型
#         复数
#         bool类型
#   字符串
#   元组
# 可变：
#   列表
#   字典
#   集合

# ######7、python中生成随机整数，随机小数的方法
# import random
# print('生成1-10中的随机数：', random.randint(1, 10))
# print('生成0-1中的随机小数：', random.random())
# print('生成1-10中的随机小数：', random.uniform(1, 10))

# ######8、python中哪些是可变数据类型，哪些是不可变数据类型
# 第6题

# ######9、a += 1与a = a+1
# 一、a+= 1探讨：
# 1、首先 += ：python底层调用__iadd__()方法
# 2、对于不可变对象：进行+=操作后，在栈中重新创建了新的对象。
# 3、对于可变对象：不会在栈中重新创建新的对象

# 二、a = a+1 探讨：
# 1、首先 + ：python底层调用__add__()方法
# 2、不可变对象：栈中重新创建新对象。
# 3、可变对象：在栈中重新创建新对象

# ######10、什么是pep8
# 使用4个空格的缩进，不要使用制表符
# 折行以确保其不会超过 79 个字符。这有助于小显示器用户阅读，也可以让大显示器能并排显示 几个代码文件。
# 使用空行分隔函数和类，以及函数内的大块代码
# 如果可能，注释独占一行
# 使用文档字符串。
# 运算符周围和逗号后面使用空格，但是括号里侧不加空格

# ######11、给定一个字符串，找出字符串第一个重复的字符
# str = input('请输入字符串：')
# for i in str:
#     if str.count(i) > 1:
#         print(i)
#         break

# ######12、简述深拷贝和浅拷贝
# 深拷贝和浅拷贝是针对容器类型中包含可变数据类型
# 浅拷贝：只是最外层地址不一样
# 深拷贝：所有的容器类型的地址都不一样

# ######13、内存机制

# ######14、使用python实现冒泡排序、快速排序
# 冒泡排序
# def bubble(lst):
#     # n趟逻辑
#     for n in range(len(lst) - 1):
#         # 结束标识
#         brk = True
#         # 无序区逻辑
#         for j in range(len(lst) - n - 1):
#             # 如果前面比后面大
#             if lst[j] > lst[j + 1]:
#                 # 前后对调值
#                 lst[j], lst[j + 1] = lst[j + 1], lst[j]
#                 # 不结束
#                 brk = False
#         print(lst)
#
#         # 结束剩余趟
#         if brk:
#             return
#
# lst = [2, 4, 6, 9, 8, 3, 1]
# print(lst)
# bubble(lst)

# 快速排序
# def quick_sort(arr):
#     if len(arr) < 2:
#         return arr
#     mid = arr[len(arr)//2]
#     left = []
#     right = []
#     arr.remove(mid)
#     for i in arr:
#         if i >= mid:
#             right.append(i)
#         else:
#             left.append(i)
#     return quick_sort(left) + [mid] + quick_sort(right)
#
# arr = [6, 2, 9, 8, 3, 5]
# print(quick_sort(arr))

# ######15、验证一个字符串是否属于回文
# str = input('请输入字符串：')
# if str == str[-1::-1]:
#     print(f'{str}是回文')
# else:
#     print(f'{str}不是回文')


